package basic;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

//给你一个整数数组 nums ，返回数组中最大数和最小数的 最大公约数 。
public class basic1979 {
    public int findGCD(int[] nums) {
        int maxIndex = nums[0];//定义最大值为该数组的第一个数
        int minIndex = nums[0];//定义最小值为该数组的第一个数
        //遍历循环数组
        for (int i = 0; i < nums.length; i++) {
            if (maxIndex < nums[i]) {
                maxIndex = nums[i];
            }
            if (minIndex > nums[i]) {
                minIndex = nums[i];
            }
        }
        System.out.println("这个数组的最大值为："+maxIndex+"\t最小值为："+minIndex);

        int i = 1;
        ArrayList<Integer> maxfactorList = new ArrayList<>();
        while (i <= maxIndex) {
            if (maxIndex % i == 0) {
                maxfactorList.add(i);
            }
            i++;
        }

        for (int a:maxfactorList) {
            System.out.print(a+"");
        }
        System.out.println();
        int j = 1;
        ArrayList<Integer> minfactorList = new ArrayList<>();
        while (j <= minIndex) {
            if (minIndex % j == 0) {
                minfactorList.add(j);
            }
            j++;
        }

        for (int a:minfactorList) {
            System.out.print(a+"");
        }
        System.out.println();
        Set<Integer> common = new HashSet<>(maxfactorList);
        common.retainAll(minfactorList);

        Iterator<Integer> it = common.iterator();
        Integer res = it.next();
//        while (it.hasNext()){
//            System.out.print(res+"");
//            System.out.println();
//        }
//
//        Iterator<Integer> it1 = common.iterator();
//        Integer res1 = it.next();
        while (it.hasNext()) {
            int temp = it.next();
            if (temp > res)
                res = temp;
        }
        return res;


    }

    public int findGCD1(int[] nums) {
        // 第一步，求得数组中的最大数和最小数
        int max = nums[0];
        int min = nums[0];
        for (int num : nums) {
            max = Math.max(max, num);
            min = Math.min(min, num);
        }

        // 第二步，判断最大公约数
        // 如果最大数对最小数取余，如果等于0那么最小数一定是最大公约数
        if (max % min == 0) {
            return min;
        } else {
            // 如果不等于，那么从最小数开始遍历，寻找最大公约数
            for (int i = min; i > 0; i--) {
                // 即最大数和最小数同时对i取余，为零者则是最大公约数
                if (max % i == 0 && min % i == 0) {
                    return i;
                }
            }
        }
        return 1;
    }







    public static void main(String[] args) {
        basic1979 basic1979 = new basic1979();
        System.out.println(basic1979.findGCD1(new int[]{5, 6, 7, 8, 6, 2}));


    }
}
